package org.example.common.util;

import org.example.entity.Account;
import org.example.entity.UserDTO;
import org.springframework.core.NamedThreadLocal;

public class UserContext {

    // ThreadLocal：每个线程独立存储，避免多线程干扰
    private static final ThreadLocal<Account> USER_HOLDER = new NamedThreadLocal<Account>("user");

    // 设置当前用户
    public static void setUser(Account user) {
        USER_HOLDER.set(user);
    }

    // 获取当前用户
    public static Account getUser() {
        return USER_HOLDER.get();
    }

    // 获取当前用户ID（常用，单独封装）
    public static Integer getUserId() {
        Account user = USER_HOLDER.get();
        if (user == null) {
            // 方案1：返回默认值（如-1），适合允许匿名访问的场景
            // return -1;

            // 方案2：抛出异常，强制调用者处理未登录场景（推荐）
            throw new IllegalStateException("当前线程未绑定用户信息，请先调用setUser()");
        }
        return user.getUserId();

    }

    // 清理ThreadLocal（必须调用，否则内存泄漏）
    public static void clear() {
        USER_HOLDER.remove();
    }
}
